package cn.bugstack.springframework.context.event;

import cn.bugstack.springframework.context.ApplicationEvent;
import cn.bugstack.springframework.context.ApplicationListener;

/**
 * 应用事件广播接口，用于管理应用事件的监听器和广播事件。
 * 在事件广播器中，定义了添加监听和删除监听的方法以及一个广播事件的方法multicastEvent。
 * 最终通过multicastEvent方法来推送事件消息，决定由谁接收。
 */
public interface ApplicationEventMulticaster {

    /**
     * 添加一个监听器，使其能够接收所有事件的通知。
     * @param listener 要添加的监听器，监听器应实现ApplicationListener接口。
     */
    void addApplicationListener(ApplicationListener<?> listener);

    /**
     * 从通知列表中移除一个监听器。
     * @param listener 要移除的监听器，监听器应实现ApplicationListener接口。
     */
    void removeApplicationListener(ApplicationListener<?> listener);

    /**
     * 将给定的应用事件广播给相应的监听器。
     * @param event 要广播的事件，事件应继承ApplicationEvent类。
     */
    void multicastEvent(ApplicationEvent event);

}

